#ifndef NODE_H
#define NODE_H

#include <vector>
#include "visitor.h"

class Node
{
	public:
		Node(void);
		~Node(void);

		virtual void AddChild(Node* newNode, unsigned int index);
		virtual void RemoveChild(unsigned int child);
		virtual bool SwapChildren(unsigned int child1, unsigned int child2);
		virtual bool HasChildren(void);
		virtual void Accept(Visitor* visitor) = 0;
		Node* Parent();

	protected:
		Node*				m_parent;
		std::vector<Node*>	m_children;
};

#endif